import pandas as pd

# 1. 读取数据
programs_df = pd.read_csv('F:/25MCM_C/C_data/summerOly_programs.csv', encoding='latin1')
athletes_df = pd.read_csv('F:/25MCM_C/C_data/merged1.csv', encoding='latin1')
#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216
# 2. 清理列名
programs_df.columns = programs_df.columns.str.strip().str.upper()
athletes_df.columns = athletes_df.columns.str.strip().str.upper()

# 3. 转换 programs_df 为长格式
year_columns = [col for col in programs_df.columns if col.isdigit()]
programs_long_df = pd.melt(
    programs_df,
    id_vars=['SPORT', 'DISCIPLINE', 'CODE', 'SPORTS GOVERNING BODY'],
    value_vars=year_columns,
    var_name='YEAR',
    value_name='EVENT'
)

# 4. 清理和标准化 'SPORT' 列
programs_long_df['SPORT'] = programs_long_df['SPORT'].str.strip().str.lower()
athletes_df['SPORT'] = athletes_df['SPORT'].str.strip().str.lower()

sport_replacements = {
    'basketball men\'s basketball': 'basketball',
    'judo men\'s extra-lightweight': 'judo',
    'football men\'s football': 'football',#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216
    'tug-of-war men\'s tug-of-war': 'tug of war',
    'athletics women\'s 100 metres': 'athletics',
    # 添加更多需要替换的名称
}

athletes_df['SPORT'] = athletes_df['SPORT'].replace(sport_replacements)
programs_long_df['SPORT'] = programs_long_df['SPORT'].replace(sport_replacements)

# 5. 转换 'YEAR' 列为整数
programs_long_df['YEAR'] = programs_long_df['YEAR'].astype(int)
athletes_df['YEAR'] = athletes_df['YEAR'].astype(int)

# 6. 执行合并
merged_df = pd.merge(
    athletes_df,
    programs_long_df,
    on=['SPORT', 'YEAR'],
    how='left'
)
#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216
# 7. 检查缺失值
print(merged_df.head())
print("\n缺失值统计：")
print(merged_df.isnull().sum())

missing_programs = merged_df[merged_df['COUNT'].isnull()][['SPORT', 'YEAR']].drop_duplicates()
if not missing_programs.empty:
    print("\n未找到匹配的 SPORT 和 YEAR 组合：")
    print(missing_programs)
    # 根据需要进行进一步处理

# 8. 保存合并后的数据
merged_df.to_csv('F:/25MCM_C/C_data/merged_olympics_data.csv', index=False)
#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216